From 5ca860dcaf0b636b50fe54cd2abff7e92091bdb3 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 26 Feb 2016 14:50:25 -0500 Subject: [PATCH] dialog: Avoid a memory leak in an error case Parsing could sometimes fail to free some of the data, if a nonexisting widget is referenced. Found by gcc's leak sanitizer. --- gtk/gtkdialog.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index ad1828ad62..45dc5bef03 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -1687,6 +1687,15 @@ typedef struct { gint col; } SubParserData; +static void +free_action_widget_info (gpointer data) +{ + ActionWidgetInfo *item = data; + + g_free (item->widget_name); + g_free (item); +} + static void parser_start_element (GMarkupParseContext *context, const gchar *element_name, @@ -1894,12 +1903,9 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable, if (item->is_default) gtk_widget_grab_default (GTK_WIDGET (object)); - - g_free (item->widget_name); - g_free (item); } - g_slist_free (data->items); + g_slist_free_full (data->items, free_action_widget_info); g_string_free (data->string, TRUE); g_slice_free (SubParserData, data); -- 2.30.2